﻿#region << 文 件 说 明 >>
/*----------------------------------------------------------------
// 文件名称：EnumHelper
// 创 建 者：杨程
// 创建时间：2021/9/22 17:11:20
// 文件版本：V1.0.0
// ===============================================================
// 功能描述：
//		
//
//----------------------------------------------------------------*/
#endregion

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using V.CodeGenerator.Model;
using System.Windows.Markup;
using System.Runtime.CompilerServices;

namespace V.CodeGenerator.ViewModel.Common
{
    public static class EnumHelper
    {
        ///// <summary>
        ///// 获取枚举列表
        ///// </summary>
        ///// <typeparam name="T"></typeparam>
        ///// <returns></returns>
        //public static List<EnumberCreditType> EnumToList<T>()
        //{
        //    List<EnumberCreditType> list = new List<EnumberCreditType>();

        //    foreach (var e in Enum.GetValues(typeof(T)))
        //    {
        //        EnumberCreditType m = new EnumberCreditType();
        //        object[] objArr = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
        //        if (objArr != null && objArr.Length > 0)
        //        {
        //            DescriptionAttribute da = objArr[0] as DescriptionAttribute;
        //            m.Desction = da.Description;
        //        }
        //        //SetClassification 
        //        object[] setClassificationArr = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(SetClassificationAttribute), true);
        //        if (setClassificationArr != null && setClassificationArr.Length > 0)
        //        {
        //            SetClassificationAttribute da = setClassificationArr[0] as SetClassificationAttribute;
        //            m.Classification = da.Type;
        //        }
        //        //Display
        //        object[] disArr = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DisplayAttribute), true);
        //        if (disArr != null && disArr.Length > 0)
        //        {
        //            DisplayAttribute da = disArr[0] as DisplayAttribute;
        //            m.Name = da.Name;
        //        }

        //        m.Value = Convert.ToInt32(e);
        //        m.Key = e.ToString();
        //        list.Add(m);
        //    }
        //    return list;
        //}

        

    }
    public class EnumExtension : MarkupExtension
    {
        public EnumExtension()
        {
        }

        public EnumExtension(Type enumType)
        {
            this.EnumType = enumType;
        }

        [ConstructorArgument("enumType")]
        public Type EnumType { get; set; }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (EnumType == null)
                throw new InvalidOperationException("The enum type is not set");

            return Enum.GetValues(EnumType);
        }

    }

    
}
